﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo02
{
    class Program
    {

        static void Main(string[] args)
        {
            Text1();
            Text2();
            Text3();
            Text4();
            Text5();
            Text6();
            Text7();
            Text8();
            Text9();
            Text10();
            Text11();
        }



        //打印杨辉三角形（要求打印10行），如下所示：（使用二维数组）
        //1
        //1    1
        //1    2    1
        //1    3    3   1
        //1    4    6   4    1
        //1    5    10  10   5   1
        private static void Text11()
        {
            int[][] arr = new int[10][];
           
            for (int i = 1; i < arr.Length + 1; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    if (i == 1 || j == 1 || j == i)
                        Console.Write(1);
                    else
                        Console.Write("*");
                }
                Console.WriteLine();
    
            }
          
        }

        //定义一个数组，然后控制台输入要查找的元素，返回输入值在数组中最后一次出现的位置。若是找不到，请打印找不到。
        private static void Text10()
        {
            int[] arr = { 1, 2, 3, 4, 5 };
            int index = -1;
            Console.WriteLine("请用户输入要查找的元素：");
            int num = int.Parse(Console.ReadLine());
            for (int i = 0; i < arr.Length; i++) {
                if (arr[i] == num) {
                    index = i;
                    break;
                } }
            if (index != -1)  {
                Console.WriteLine(num + "在数组中的索引是" + index); 
            } else {
                Console.WriteLine("找不到！！！");
            }
            Console.WriteLine("***********************************************************************************************************************");
        }

        //定义一个方法，实现一维数组的排序功能，从大到小排序。(不要用Array类的方法)
        private static void Text9()
        {
            int[] arr = { 10, 90, 20, 40, 70 };
            for (int i = 0; i < arr.Length - 1; i++) {
                for (int j = i + 1; j < arr.Length; j++) {
                    if (arr[i] < arr[j])  {
                        int index = arr[j];
                        arr[j] = arr[i];
                        arr[i] = index;
                    } }  }
            Console.WriteLine("排序后循序是：");
            foreach (int a in arr){
                Console.Write(a + "\t");
            }
            Console.WriteLine();
            Console.WriteLine("***********************************************************************************************************************");
        }

        //在 Main 方法中创建一个 double 类型的数组，并在该数组中存入 5 名学生的考试成绩(控制台输入)，计算总成绩和平均成绩。
        //要求使用foreach语句实现该功能，
        private static void Text8()
        {
            double[] score = new double[5];
            int sum = 0;
            for (int i = 0; i < score.Length; i++)
            {
                Console.WriteLine("请输入第{0}个学生的分数", i + 1);
                score[i] = double.Parse(Console.ReadLine());
                sum = (int)(sum + score[i]);
            }
            double avg = sum / score.Length;
            Console.WriteLine("总成绩为:" + sum);
            Console.WriteLine("平均值为:" + avg);
            Console.WriteLine("*************************************************************************************************************");
        }

        //输入一行字符串，分别统计出其中英文字母、数字、空格的个数。
        private static void Text7()
        {
            string str = "123  abc";
            int ZMcount = 0;
            int SZcount = 0;
            int KGcount = 0;
            foreach (char c in str)
            {
                if (char.IsLetter(c))
                    ZMcount++;
                if (char.IsDigit(c))
                    SZcount++;
                if (char.IsWhiteSpace(c))
                    KGcount++;
            }
            Console.WriteLine("英文字母个数{0},数字个数{1},空格个数{2}", ZMcount, SZcount, KGcount);
            Console.WriteLine("***************************************************************************************************************");
        }

        //如果一个数组保存元素是有序的（从大到小），向这个数组中插入一个数，使得插入后的数组元素仍然保持有序。
        private static void Text6()
        {
            int[] arr = { 1, 20, 50, 70, 90 };
            int[] newarr = new int[6];
            Console.WriteLine("请输入一个数：");
            int num = int.Parse(Console.ReadLine());
            int index = -1;
            for (int i = 0; i < newarr.Length; i++)
            {

            }
            Console.WriteLine("***********************************************************************************************************************");
        }

        //在 Main 方法中创建一个字符串类型的数组，并存入 5 个值，然后将数组中下标是偶数的元素输出。
        private static void Text5()
        {
            int[] arr = { 1, 2, 3, 4, 5 };
            for (int i = 0; i < arr.Length; i++)
            {
                if (i % 2 == 0) { Console.WriteLine("下标是偶数的元素为：" + arr[i]); }
            }
            Console.WriteLine("***********************************************************************************************************************");
        }

        //打印实心正方形
        //用户输入正方形边长，用* 打印出实心正方形。
        //如：用户输入5，则输出如下图形。
        //*****
        //*****
        //*****
        //*****
        //*****
        private static void Text4()
        {
            Console.WriteLine("请用户输入正方形边长：");
            int a = int.Parse(Console.ReadLine());
            for (int i = 0; i < a; i++){
                for (int j = 0; j < a; j++) {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            Console.WriteLine("*************************************************************************************************************");
        }

        //打印菱形
        //  *
        // ***
        //*****
        // ***
        //  *
        //边长是3
        //行列数就是5
        private static void Text3()
        {
            Console.WriteLine("请用户输入棱长：");
            int a = int.Parse(Console.ReadLine());
            for (int i = 1; i < a+1; i++)
            {
                for (int j = 1; j <= a-i ; j++)
                    Console.Write(" ");
                for (int k = 1; k <= 2 * i - 1; k++)
                    Console.Write("*");
                Console.WriteLine();
            }
            for (int i = 0; i < a-1; i++)
            {
                for (int j = 0; j < i+1; j++)
                    Console.Write(" ");
                for (int j = 0; j < 2 * (2 - i) - 1; j++)
                    Console.Write("*");
                Console.WriteLine();
            }
            Console.WriteLine("*************************************************************************************************************");
            } 

    //打印空心正方形
    //用户输入正方形边长，用* 打印出空心正方形。
    //如：用户输入5，则输出如下图形。
    //*****
    //*    *
    //*    *
    //*    *
    //*****
    private static void Text2()
        {
            Console.WriteLine("请用户输入正方形边长：");
            int a = int.Parse(Console.ReadLine());
            for (int i = 1; i < a+1; i++){
                for (int j= 1; j < a+1; j++){
                    if (i == 1 || i == a|| j == 1 || j == a)
                        Console.Write("*");
                    else
                      Console.Write(" ");
                }
                Console.WriteLine( );
            }
            Console.WriteLine("*************************************************************************************************************");
        }

        //打印九九乘法表
        private static void Text1()
        {
            for (int i = 1; i <=9; i++)  {
                for (int j = 1; j <=i; j++){
                    Console.Write("{0}*{1}= {2}\t", i, j, i * j);
                    //Console.Write(i + "* "+  j +" = "+i*j + "\t");
                }
                Console.WriteLine( );
            } } }
}
